<?php
namespace app\admin\controller;

use app\common\controller\AdminBase;
use think\Db;
use think\Exception;


/**
 * 签订公司配置
 * Class BusinessType
 * @package app\admin\controller
 */
class SignCompany extends AdminBase
{
    private $sign_company_model;

    public function _initialize()
    {
        parent::_initialize();
        $this->sign_company_model = model('SignCompany');
    }

    public function index()
    {
        $where = [];
        $list = $this->sign_company_model->getList($where, $this->pageLimit);
        return $this->fetch('index', [
            'list' => $list
        ]);
    }

    /**
     * 添加签订公司
     * @return mixed|string
     */
    public function add()
    {
        if ($this->request->isAjax()) {
            $sign_company = $this->request->param('sign_company', '', 'app\common\controller\ParamFilter::normalParam');
            if (check_str_is_out_range($sign_company, 255)) {
                return ajax_return_error('公司名字长度超出限制，最多 255 个字！');
            }

            $code = $this->request->param('code', '', 'trim');
            if (empty($code)) {
                return ajax_return_error('公司代码必须填写！');
            }
            if (!preg_match('/[a-zA-Z]{1,6}/', $code)) {
                return ajax_return_error('公司代码长度超出限制，最多 6 个字母！');
            }
            $code = strtoupper($code);

            /*检查代码是否已经存在*/
            if ($this->sign_company_model->getInfo(['code' => $code])) {
                return ajax_return_error('公司代码已经存在，请检查！');
            }

            $data = [
                'sign_company' => $sign_company,
                'code' => $code,
            ];

            if ($this->sign_company_model->addData($data)) {
                return ajax_return_adv('添加成功！');
            } else {
                return ajax_return_error('添加失败！');
            }
        }

        return $this->fetch('add');
    }

    /**
     * 编辑签订公司
     * @return mixed|string
     */
    public function edit()
    {
        $id = $this->request->param('id', 0, 'intval');
        $old_info = $this->sign_company_model->getInfo(['id' => $id]);

        if ($this->request->isAjax() && $id > 0) {
            $sign_company = $this->request->param('sign_company', '', 'app\common\controller\ParamFilter::normalParam');
            if (check_str_is_out_range($sign_company, 255)) {
                return ajax_return_error('公司名字长度超出限制，最多 255 个字！');
            }

            $code = $this->request->param('code', '', 'trim');
            if (empty($code)) {
                return ajax_return_error('公司代码必须填写！');
            }
            if (!preg_match('/[a-zA-Z]{1,6}/', $code)) {
                return ajax_return_error('公司代码长度超出限制，最多 6 个字母！');
            }
            $code = strtoupper($code);

            /*检查代码是否已经存在*/
            if ($old_info->code != $code) {
                if ($this->sign_company_model->getInfo(['code' => $code])) {
                    return ajax_return_error('公司代码已经存在，请检查！');
                }
            }

            $data = [
                'sign_company' => $sign_company,
                'code' => $code,
            ];

            if ($this->sign_company_model->saveDate($id, $data)) {
                return ajax_return_adv('修改成功！');
            } else {
                return ajax_return_error('修改失败！');
            }
        }

        return $this->fetch('edit', [
            'info' => $old_info,
            'id' => $id,
        ]);
    }

    /**
     * 删除签订公司（可批量）
     */
    public function delete()
    {
        $ids = $this->request->param('ids', '', 'trim');
        $ids = explode(',', $ids);
        $ids = array_unique(array_filter(array_map(function($v){
            return (int)$v;
        }, $ids)));

        if ($this->request->isAjax()) {
            if (empty($ids)) {
                return ajax_return_adv('未进行任何删除！');
            }
            Db::startTrans();
            $data = [
                'is_delete' => STATUS_DELETE,
            ];
            foreach ($ids as $id) {
                $res = $this->sign_company_model->saveDate($id, $data);
                if ($res === false) {
                    Db::rollback();
                    return ajax_return_error('删除失败，请重试！');
                }
            }
            Db::commit();
            return ajax_return_adv('删除成功！');
        }
    }
}
